﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Web.Helper;
using BLL.Helper.Exception;
using BLL.IServiceImplementation;
using BLL.ServiceImplementation;
using BLL.Mappers;
using BLL.DTO.Genero;
using BLL.DTO.PreguntasSecretas;
using BLL.DTO.Region;
using BLL.DTO.Ciudad;
using BLL.DTO.Comuna;
using BLL.DTO.HelperDTO;

namespace Web.Controllers.PublicaTuPropiedadController
{
    public class PublicaTuPropiedadController : BaseController
    {
        #region Constructor
        private readonly IGeneroSvc generoSvc;
        private readonly IPreguntasSecretasSvc preguntasSecretasSvc;
        private readonly IRegionSvc regionSvc;
        private readonly ICiudadSvc ciudadSvc;
        private readonly IComunaSvc comunaSvc;

        public PublicaTuPropiedadController()
        {
            generoSvc = new GeneroSvcImpl();
            preguntasSecretasSvc = new PreguntasSecretasSvcImpl();
            regionSvc = new RegionSvImpl();
            ciudadSvc = new CiudadSvcImpl();
            comunaSvc = new ComunaSvcImpl();
        }
        #endregion

        public ActionResult IndexSistema()
        {
            return View();
        }

        #region Registro de Usuario
        public ActionResult NaturalPeopleRegister()
        {
            //De esta forma traigo todos los géneros existentes y los almaceno en un viewBag
            ViewBag.Genero = new SelectList(GetAllGender(0), "pk_Genero", "nombre_Genero");

            //De esta forma traigo todas las preguntas secretas y las almaceno en un viewBag
            ViewBag.PreguntasSecretas = new SelectList(GetAllQuestion(0), "pk_PreguntasSecretas", "nombre_PreguntasSecretas");

            //De esta forma traigo todas las regiones existentes y las almaceno en un viewBag
            ViewBag.Region = new SelectList(GetAllRegiones(0), "pk_Region", "nombre_Region");

            return View("NaturalPeopleRegister");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult NaturalPeopleRegister_submit(RegisterDTO registerDTO)
        {
            if (ModelState.IsValid)
            { 
            }
            else
            {
                ModelState.AddModelError("", "Error");
            }
            return View("NaturalPeopleRegister");
        }
        #endregion

        #region [Generic Method]
        private List<RegionDTO> GetAllRegiones(int pkRegion)
        {
            List<RegionDTO> listRegiones = new List<RegionDTO>();

            //Control de dato de entrada
            if (pkRegion == 0)
            {
                listRegiones = regionSvc.GetAll();
            }
            else
            {
                listRegiones = regionSvc.GetAllById(pkRegion);   
            }
            return listRegiones;
        }

        private List<GeneroDTO> GetAllGender(int pkGenero)
        {
            List<GeneroDTO> listGenero = new List<GeneroDTO>();

            //Control de dato de entrada
            if (pkGenero == 0)
            {
                listGenero = generoSvc.GetAll();
            }
            else
            {
                listGenero = generoSvc.GetAllById(pkGenero);
            }
            return listGenero;
        }

        private List<PreguntasSecretasDTO> GetAllQuestion(int pkPreguntaSecreta)
        {
            List<PreguntasSecretasDTO> listPreguntaSecreta = new List<PreguntasSecretasDTO>();

            //Control de dato de entrada
            if (pkPreguntaSecreta == 0)
            {
                listPreguntaSecreta = preguntasSecretasSvc.GetAll();
            }
            else
            {
                listPreguntaSecreta = preguntasSecretasSvc.GetAllById(pkPreguntaSecreta);
            }
            return listPreguntaSecreta;
        }

        public JsonResult GetAllCityByRegion(int fkRegion)
        {
            List<CiudadDTO> listCiudad = new List<CiudadDTO>();

            //Control de dato de entrada
            if (fkRegion != 0)
            {
                listCiudad = ciudadSvc.GetAllByIdRegion(fkRegion);
            }
            return Json(listCiudad);
        }

        public JsonResult GetAllComunaByCity(int fkCiudad)
        {
            List<ComunaDTO> listComuna = new List<ComunaDTO>();

            //Control de dato de entrada
            if (fkCiudad != 0)
            {
                listComuna = comunaSvc.GetAllByIdCity(fkCiudad);
            }
            return Json(listComuna);
        }
        #endregion
    }
}
